//
//  HDOauthViewController.swift
//  HDSwfitWeibo
//
//  Created by wty on 16/4/9.
//  Copyright © 2016年 wty. All rights reserved.
//

import UIKit
import SVProgressHUD

class HDOauthViewController: UIViewController {
    override func  loadView() {
        super.loadView()
        view  = webView
        webView.delegate = self
    }
    override   func viewDidLoad() {
         super.viewDidLoad()
        //设置背景颜色
        view.backgroundColor = GlobalGBColor
        //设置导航栏左右
        setupNavitianBar()
        //加载授权界面
        let url = oauthURL()
        let request = NSURLRequest(URL: url)
        webView.loadRequest(request)
        //添加指示器
        SVProgressHUD.showInfoWithStatus("加载中")
        SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.None)
    }
    //拼接Oauth授权登陆界面的url  GET
    private func oauthURL () ->NSURL {
        let urlString = OauthUrl + "?client_id=" + client_id + "&redirect_uri=" + redirect_uri

        return NSURL(string: urlString)!
    }
    
    
    
    
    //设置导航栏左右
    private func setupNavitianBar () {
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "填充", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("autofill"))
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target:self , action: Selector("close"))
    }
    //实现按钮监听方法
    //自动填充
    @objc  private func autofill () {
        // 使用webView执行js代码
        let js = "document.getElementById('userId').value = 'wty159357@163.com';document.getElementById('passwd').value = '159357wang'"
        webView.stringByEvaluatingJavaScriptFromString(js)
        
    }
    //退出界面
    @objc private func close () {
        //关闭指示器
        SVProgressHUD.dismiss()
         dismissViewControllerAnimated(true, completion: nil)
    }
    
    
    

    
    //MRAK- 懒加载  
    lazy var webView : UIWebView = UIWebView()
}



//MARK  -实现  UIWebViewDelegate 代理方法
extension HDOauthViewController : UIWebViewDelegate {
    //webView 加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    //webView 加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        //根据错误状态来判断是否显示指示器
        //如果是取消授权拦截 退出登录界面 就不做任何提示
        if error?.code == 102{
            return
        }
        //这个会清除之前所有指示器  自己一段时间后会消失
        SVProgressHUD.showErrorWithStatus("网络不给力")
        SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.None)
    }
    
    //webView 是否去加载一个请求 因为不拦截就会全部回调 百度
    //这里回调是对整个过程回调  所有要进行双重判断
   // true  是放行 不拦截
    //false 拦截 加载
    
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        //根据发送的url 加载网页后  放回一个带有code 的url   这里获取url的绝对路径来判断如何回调
        let urlString = request.URL?.absoluteString
        // 当如果是  http://www.baidu.com/ 开头的地址,我们自己来处理拦截不让他去加载,其他的地址放行
        // 点击取消按钮: http://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330
        
        // 点击授权: http://www.baidu.com/?code=4e496956aa012e11299494637e9ca536
        // 判断字符串前缀是否有授权回调地址  http://www.baidu.com/ 
        let isRedirectURL  = urlString!.hasPrefix(redirect_uri)
        //1.如果没有就不拦截
        if !isRedirectURL {
            return true
        }else{
            //2.如果有 就截取code  判断是取消还是授权按钮  分别操作 
            //2.1query是get请求?后面的东西
            let query = request.URL?.query
            //2.2判断query前缀是不是"code=" 如果是就是点击授权
            let codeString = "code="
            if query!.hasPrefix(codeString){
                //点击授权
                //再截取code=后面的值  将字符串转化成oc字符串再截取 4e496956aa012e11299494637e9ca536
                let coder = (query! as NSString).substringFromIndex(codeString.characters.count)
                ///实现加载accessToken  如果授权成功  下次不再需要授权
                HDUserAccoutViewModel.userAccoutShare.loadAccessToken(coder, callBack: { (error) -> () in
                    //获取获取token失败
                    if error != nil {
                        HDPrint(error)
                        SVProgressHUD.showErrorWithStatus("网络不给力")
                        //延时
                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
                            self.close()
                        })
                        return
                        
                    }
                    //获取成功 切换到欢迎界面
                    (UIApplication.sharedApplication().delegate as! AppDelegate).switchViewController(false)
                    HDPrint("加载accessToken成功")
                })
      

            }else{
                //点击取消
                close()
            }
            return false
        }
    }
    
    

}
